package com.wxy.demo.reflect;

import lombok.extern.slf4j.Slf4j;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

/**
 * <p>
 * 反射测试
 * </p>
 *
 * @author e-Xiaoyuan.Wang
 * @since 2023/1/31 14:44
 */
@Slf4j
public class Main {
    public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, InvocationTargetException, IllegalAccessException, InstantiationException {
        // 获取class
        Class<?> clz = Class.forName("com.wxy.demo.reflect.A");

        // 获取类中所有方法
        Method[] methods = clz.getDeclaredMethods();
        log.info("methods：{}", (Object) methods);

        // 获取有参sayHello方法
        Method method = clz.getDeclaredMethod("sayHello", String.class);
        log.info("method：{}", method);

        // 调用有参sayHello方法
        method.invoke(null, (Object) null);
        method.invoke(null, "张三");

        // 获取无参sayHello方法
        Method method1 = clz.getDeclaredMethod("sayHello");
        log.info("method1：{}", method1);

        // 调用无参sayHello方法
        method1.invoke(null);

        // 获取无参sayHi方法
        Method method2 = clz.getDeclaredMethod("sayHi");
        log.info("method2：{}", method2);

        // 调用无参sayHi方法
        method2.invoke(clz.newInstance());
        method2.invoke(clz.getDeclaredConstructor().newInstance());
    }
}
